/**
 *@file include.h
 *@brief Arquivo com os protÃ³tipos das funÃ§Ãµes
 *
 *@details Arquivo que deve ser incluÃ­do no main.c e deve ficar
 * na pasta include. Ele contÃ©m os protÃ³tipos de todas as funÃ§Ã£o
 * e os includes para os arquivos restantes.
 *
 *@author VinIPSmaker
 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
#ifndef SAFE_MODE
# include <stdbool.h>
# include <stdint.h>
#else
typedef unsigned short int uint_least8_t;
#endif
#ifdef __bool_true_false_are_defined
/**
 *@def Bool_t
 *@brief Usado como tipo para armazenar verdadeiros e falsos.
 */
 typedef bool Bool_t;
#else
/**
 *@def Bool_t
 *@brief Usado como tipo para armazenar verdadeiros e falsos.
 */
 typedef unsigned short int Bool_t;
#endif
#include <SDL/SDL.h>
#include <SDL/SDL_thread.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>

#include "tipos.c"

#ifndef TRUE
/**
 *@def TRUE
 *@brief Usado para verdadeiro.
 */
# define TRUE 1
#endif
#ifndef FALSE
/**
 *@def FALSE
 *@brief Usado para falso.
 */
# define FALSE 0
#endif
#if TRUE != 1
# undef TRUE
# define TRUE 1
#endif
#if FALSE != 0
# undef FALSE
# define FALSE 0
#endif

/**
 *@def VERSAO
 *@brief Macro que armazena a versao do projeto
 *
 *@details Macro que armazena uma string estilo C
 * que informa a versÃ£o do projeto. E usada pelos
 * codigos que informam a versao do projeto, tais
 * como a funcao init, que durante sua execucao
 * escreve na saida padrao a versao em execucao.
 *
 */
#define VERSAO "0.0-alpha"
/**
 *@def NUMERO_DE_COZINHEIROS
 *@brief Macro que armazena o valor inteiro
 * do nÃºmero de cozinheiros no jogo/mapa.
 *
 *@warning Estara sendo substitui­da quando
 * implementarmos um sistemas de niveis de
 * dificuldade na funcao init_map.
 */
#define NUMERO_DE_COZINHEIROS 3
/**
 *@def SAFE_MODE
 *@brief SAFE_MODE define se a compilacao
 * deve utilizar opcoes de seguranca.
 *
 *@details Se SAFE_MODE estiver definida
 * as funcoes graficas e sonoras nao
 * tentaram utilizar opcoes que podem
 * falhar em plataformas/arquiteturas
 * especificas.
 */
//#define SAFE_MODE
/**
 *@def DEBUG
 *@details Se DEBUG estiver definida
 * erros que ocorrerem serao enviados
 * impressos em stderr.
 *
 *@see RELEASE
 *
 */
#define DEBUG
/**
 *@def RELEASE
 *@brief Sera definida para a compilacao
 * da versao de usuario.
 *
 *@see DEBUG
 */
//#define RELEASE

/**
 *@def SOM_JOGO
 *@brief Usado como parâmetro para os membros
 * do módulo sfx para indicar o som-tema do
 * jogo
 */
#define SOM_JOGO 1

/**
 *@def SOM_MENU
 *@brief Usado como parâmetro para os membros
 * do módulo sfx para indicar o som do menu
 */
#define SOM_MENU 2

/**
 *@def SOM_TELA
 *@brief Usado como parâmetro para os membros
 * do módulo sfx para indicar o som da tela
 * de abertura
 */
#define SOM_TELA 3


//prototipos das funcoes:
int init();
void sair();
void init_map(Tile_t (* const mapa)[20], int * npeixes);
void calculo_fake_cors(struct Anima * anima);

void gfx_prepare();
void gfx_sair();
void gfx_cartografo();
int gfx_main(void * gfx_fps);
void intro();
void draw_menu(short int opcao_nts,short int opcao_dps);
void gameover();
int creditos(void * durante);

void menu1(int *menu, SDL_Event atitudes_do_usuario, int *fechar, SDL_Thread * menu_thread, int *auxiliardomenu);
void movimentos(SDL_Event atitudes_do_usuario);
void andando();

void sfx_init();
void pausa_musica();
void retoma_musica();
void sfx_quit();
void play_sound(int num);
void free_music(int num);

unsigned short int ver_num_pilhas( void );
Pilha_id nova_pilha( void );
Bool_t existe_pilha(Pilha_id pilha);
Bool_t esta_vazia(Pilha_id pilha);
STamanho_t ver_tam_pilha(Pilha_id pilha);
Bool_t colocar_na_pilha(Pilha_id pilha,Prato_t elemento);
Prato_t tirar_da_pilha(Pilha_id pilha);
Prato_t ver_na_pilha(Pilha_id pilha);
Bool_t destruir_pilha(Pilha_id pilha);
Bool_t destruir_pilhas( void );


//codigo das funcoes:
#include "../misc.c"
#include "../gfx.c"
#include "../ai.c"
#include "../sfx.c"
#include "../evento.c"
#include "../pilhas.c"
